

//抽象类和普通类有什么区别
//1.抽象类不能实例化，普通类可以
//2.抽象类当中，可以包含非抽象方法和抽象方法,但是普通类只能包含抽象方法
//3.



//1.抽象类使用abstrac来修饰类
//2.抽象类不能被实例化
//3.此时在抽象类当中，可以有抽象类 方法，或者非抽象类方法
//4.什么是抽象方法，一个方法被abstract修饰，没有具体的实现。只要包含抽象方法，必须是抽象类
//5.当一个普通类继承了这个抽象类，必须从写抽象类当中的抽象方法
//6.抽象类存在的最大意义，就是为了被继承
//7.抽象方法不能被private，final，static修饰。所以一定要满足重写的规则
//8.当一个子类没有重写抽象父类的方法，可以把当前子类变成abstract修饰
//9.抽象类当中不一定包含抽象方法

package Demo1;

abstract class Shape {

    protected abstract void draw();

   /* public void func() {

    }*/
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("画矩形！");
    }
}
/*abstract class Rect extends Shape {

}
class A extends Rect {
    @Override
    public void draw() {
        System.out.println("画矩形！");
    }
}*/
class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("画圆！");
    }
}
class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("❀！");
    }
}

public class Test {
    public static void drawMap(Shape shape) {
        shape.draw();
    }
    public static void main(String[] args) {
        //Shape shape = new Shape();
        drawMap(new Rect());
        drawMap(new Cycle());
        drawMap(new Flower());

        Shape shape = new Rect();
    }
}
